跳到主要内容

插件 semo-plugin-api

· 阅读需 7 分钟
Random Image
图片与正文无关

今天来写第四篇,给大家展示一下昨天花了 4 个小时新写的一个 Semo 插件,同时预告下一篇给大家讲讲 Semo 的 REPL 环境

功能描述

Semo 由于本身不提供任何直接的功能,只是一个命令行开发的规范和约束,所以,如果想得到若干功能,都需要基于 Semo 来扩展。今天这个插件就给 Semo 提供了网络访问的能力,基于流行的 axios npm 包。

可能你会想,我想用的时候就直接用 axios 了,为什么要用这个插件呢,问得好,当然可以直接用 axios,但是这里还有一些额外的好处,也就是带了一个类似于 curl 的命令行工具。

下面我们来说说安装和用法

安装

假设你还没有安装 Semo,那就一起装了吧~

npm i -g @semo/cli semo-plugin-api
semo api help

执行 help 可以看到一大堆参数,不要被吓到,其实平时基本都用不着。

用法

这里,我们以网上公开的 Fake Rest Server 为例,给大家演示

GET 请求

用于默认就是 GET,所以,不需要加额外的参数。

 $ semo api https://jsonplaceholder.typicode.com/posts/1

{
userId: 1,
id: 1,
title: 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit',
body: 'quia et suscipit\n' +
'suscipit recusandae consequuntur expedita et cum\n' +
'reprehenderit molestiae ut ut quas totam\n' +
'nostrum rerum est autem sunt rem eveniet architecto'
}

POST 请求

这里可以看到,用了 -X 来表示请求动词,也可以用 --method,同时我们用 --data 来表示请求体,注意这里可以用一行命令构造一个对象结构。

 $ semo api -X POST https://jsonplaceholder.typicode.com/posts --data.title=foo --data.body=bar --userId=1

{ title: 'foo', body: 'bar', id: 101 }

PUT 请求

同理,PUT 就是替换,其余和 POST 类似,注意这里用了小写的 put,意思是这里动词不区分大小写。

 $ semo api -X put https://jsonplaceholder.typicode.com/posts/1 --data.title=foo --data.body=bar --userId=1 --id=1

{ title: 'foo', body: 'bar', id: 1 }

PATCH 请求

PATCH 用来替换其中的一部分

 $ semo api -X patch https://jsonplaceholder.typicode.com/posts/1 --data.title=foo

{
userId: 1,
id: 1,
title: 'foo',
body: 'quia et suscipit\n' +
'suscipit recusandae consequuntur expedita et cum\n' +
'reprehenderit molestiae ut ut quas totam\n' +
'nostrum rerum est autem sunt rem eveniet architecto'
}

DELETE 请求

DELETE 时,Rest Server 并没有给我返回内容,只是没报错

semo api -X delete https://jsonplaceholder.typicode.com/posts/1
{ status: 200, statusText: 'OK' }

HEAD 请求和 OPTIONS 请求

这两个也是可以发出,看不到什么明显的响应。

 $ semo api -X head https://jsonplaceholder.typicode.com/posts/1

{ status: 200, statusText: 'OK' }

$ semo api -X options https://jsonplaceholder.typicode.com/posts/1

{
status: 204,
statusText: 'No Content',
'access-control-allow-credentials': 'true',
'access-control-allow-methods': 'GET,HEAD,PUT,PATCH,POST,DELETE'
}

我对这两种请求的响应内容不是很满意,后面可能还要完善一下。

支持发送 --headers

其实支持很多参数,但是大部分真的不是很常用,如果需要了解的话,可以去看 axios 包的说明。

semo api https://jsonplaceholder.typicode.com/posts/1 -H 'X-A:B'
semo api https://jsonplaceholder.typicode.com/posts/1 -H.'X-A'=B

很明显第二种风格很诡异,建议还是用第一种风格。

其他一些功能点

通过文件来传参

参数那么多,每次都写太累了,可以弄成 js 或者 json 文件

semo api --file api.js
semo api --file api.json

这里原来的 -XURL 可写可不写,可以在文件里写,还有就是如果是 js,模块可以返回 literal object 或者函数,或者 Promise。

给 json 响应加点颜色

当然,就算是不加 --color,某些终端也是给一定的着色的,这里如果加了 --color 参数,则会用 SemoUtils.log 来着色。

semo api https://jsonplaceholder.typicode.com/posts/1 --color

访问 Proxy

如果你要测试的接口访问不到怎么办呢,这里提供了参数支持

semo api http://myip.ipip.net
semo api http://myip.ipip.net --ss
semo api http://myip.ipip.net --socks-proxy=socks://127.0.0.1:1080

可以看到加不加 --ss 参数,返回结果是不同的,另外,如果恰好你的端口也开在 1080,就可以不用输入这么长来执行具体的端口了。

调试信息

可以用 debug 的机制来查看隐藏的调试信息:

DEBUG=semo-* semo api https://jsonplaceholder.typicode.com/posts/1

隐式执行

就是不打算全局或者项目内安装这个插件还想用

semo run api -- https://jsonplaceholder.typicode.com/posts/1

Semo run 会自动帮你把插件下载到另一个地方,只有用的时候才会生效,平时 semo help 是看不到的。

不想安装 Semo 但想试玩一下这个插件

这种方式每次都要隐式的下载一下 Semo,其实挺慢的,仅供试玩。

npx @semo/cli run api -- http://myip.ipip.net

以包的形式对外提供服务

import { api } from 'semo-plugin-api'
API = api('debug-prefix')
await API.get(url, config)
await API.post(url, data, config)

或者

const { api } = await Utils.invokeHook('component')

小结

这又是一个在几个小时内完成的一个插件,核心还是用的别人的,展示的是 Semo 封装的能力和统一的风格,而且实际上这样的一个小插件也将作为后面整合起来的稍大项目的基础模块。

欢迎大家试用,讨论,有什么问题可以提 issues 或者参与共建,我的愿景目标是形成一个小社区,大家一起共建出许多插件,有的是为了完成更大的项目的基础模块,有的可能是组织内的私有模块,还有的可能仅仅是为了好玩。

semo run plugin -- --remote

可以看到目前的插件还很少,我还需要继续努力哈,希望得到大家的支持。